package com.letoo.sso.core.service;

import java.util.List;
import java.util.Map;

import com.letoo.sso.dataaccess.datasource.DataSource;
import com.letoo.sso.dataaccess.domain.dbo.SystemCodeDO;

/**
 * 系统代码Service
 * 
 * @author zhihongp
 * 
 */
public interface SystemCodeService extends BaseService<SystemCodeDO> {

    /**
     * 初始化系统代码到缓存中
     * 
     * @return
     */
    @DataSource(value = "master")
    boolean initSystemCode();

    /**
     * 添加系统代码
     * 
     * @param username
     * @param codeType
     * @param codeTypeName
     * @param codeValue
     * @param codeValueName
     * @param remark
     * @param orderNo
     * @return
     */
    @DataSource(value = "master")
    Long addSystemCode(String username, String codeType, String codeTypeName, String codeValue, String codeValueName, String remark, Integer orderNo);

    /**
     * 更新系统代码
     * 
     * @param username
     * @param id
     * @param codeTypeName
     * @param codeValueName
     * @param remark
     * @param orderNo
     * @return
     */
    @DataSource(value = "master")
    boolean modifySystemCode(String username, Integer id, String codeTypeName, String codeValueName, String remark, Integer orderNo);

    /**
     * 通过codeType获取对应的系统代码列表
     * 
     * @param codeType
     * @return
     */
    @DataSource(value = "master")
    List<SystemCodeDO> getSystemCodeList(String codeType);

    /**
     * 根据codeType的集合获取对应的SystemCodeDO的MAP集合(KEY:codeType, VALUE:List<SystemCodeDO>有序列表)
     * 
     * @param codeTypes
     *            codeType的集合
     * @return
     */
    @DataSource(value = "master")
    Map<String, List<SystemCodeDO>> getSystemCodeMapWithList(String... codeTypes);

    /**
     * 根据codeValue获取系统代码
     * 
     * @param codeValue
     * @return
     */
    @DataSource(value = "master")
    SystemCodeDO getSystemCode(String codeType, String codeValue);

    /**
     * 根据codeType的集合获取对应的SystemCode的Map集合(KEY:codeValue, VALUE:SystemCodeDO对象)
     * 
     * @param codeTypes
     * @return
     */
    @DataSource(value = "master")
    Map<String, SystemCodeDO> getSystemCodeMap(String... codeTypes);

    /**
     * 根据codeType获取默认的系统代码
     * 
     * @param codeType
     * @return
     */
    @DataSource(value = "master")
    SystemCodeDO getDefaultSystemCode(String codeType);
}
